package com.znz.analysis.hdfs;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.znz.analysis.constant.enumeration.HDFSFileType;
import com.znz.analysis.constant.properties.HDFSProperties;
import com.znz.analysis.util.HttpRequest;

/**
 * @author 作者 :TP
 * @version 创建时间：2017年6月23日 下午2:52:06
 *
 */
@Component
public class WebHdfsHandler {

	@Resource
	private HDFSProperties hdfsProperties;
	@Resource
	private HttpRequest httpRequest;

	/**
	 * 获取某个目录下的所有文件名称
	 * 
	 * @param dir
	 * @return
	 */
	public List<String> getFiles(String dir, HDFSFileType type) {
		List<String> pathSuffixs = new ArrayList<String>();
		// 获取某个目录的信息
		String response = listStatus(dir);
		JSONObject response_object = JSONObject.parseObject(response);
		if (response_object != null) {
			// 取出文件或目录名称
			JSONArray jsonArray = response_object.getJSONObject("FileStatuses").getJSONArray("FileStatus");
			jsonArray.forEach(i -> {
				JSONObject jsonObject = (JSONObject) i;
				if (jsonObject.getString("type").equalsIgnoreCase(type.toString()))
					pathSuffixs.add(jsonObject.getString("pathSuffix"));
			});
		}
		return pathSuffixs;
	}

	/**
	 * 获取某个目录的信息
	 * 
	 * @param dir
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private String listStatus(String dir) {
		String response = httpRequest
				.sendGet("http://" + hdfsProperties.getHost() + ":50070/webhdfs/v1" + dir + "?op=LISTSTATUS", null);
		return response;
	}
}
